// 引入云开发模块和全局变量
const cloud = require('../../utils/cloud.js') // 引入自定义的云开发模块
const app = getApp(); // 获取全局对象
// 引入云数据库
const db = wx.cloud.database(); // 获取云数据库对象
Page({
  // 页面初始化数据
  data: {
      code:"",
      // 初始化用户头像、昵称
      avatarUrl: "https://i.postimg.cc/qqWgStbK/a.jpg",
      nickName: "游客，点击登录",
      isLogin:false,
      fuyuanli: {
        max: 10,
        gap: 10,
        Level: 1,
        shengli: 0,
        xinli: 0,
        qingxu: 0,
        shejiao: 0
      },
      //用户身份id
      openid:""
  },
  // 登录函数
  toLogin() {
    // 判断用户是否已登录
    if (this.data.isLogin) {
      // 如果已登录，跳转到用户中心页面
      wx.navigateTo({
        url: '/pages/auth/usercenter/usercenter',
      });
      return;
    }
//小程序登录第一步获取微信服务端code
    wx.login({
      success: (res1) => {
        wx.request({
          url: 'http://localhost:8080/login',
          method:'GET',
          data:{
            code:res1.code
          },
          success:(res2)=>{
            this.setData({
              openid:res2.data.openid,
              nickName:res2.data.nickName,
              avatarUrl:res2.data.avatarUrl,
              isLogin:true
            });
            const app=getApp();
            app.globalData.userInfo.openid=res2.data.openid;
            app.globalData.userInfo.nickName=res2.data.nickName;
            app.globalData.userInfo.isLogin=true;
            wx.setStorageSync('token', res2.data.token);
          }
      });
      }
    });
},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    const openid = wx.getStorageSync('openid')
    const userInfo = wx.getStorageSync('userInfo')
    const isLogin = wx.getStorageSync('isLogin')

    if (isLogin && userInfo) {
      this.setData({isLogin, userInfo})
      return 
    }

    if (openid) {
      // 使用本地的 openid 查询云数据库
      wx.cloud.database().collection('users')
        .where({
          openid  
        })
        .get()
        .then(res => {
          if (res.data.length > 0) {
            const userInfo = res.data[0]

            // 保存到本地存储
            wx.setStorageSync('userInfo', userInfo)
            wx.setStorageSync('isLogin', true)

            this.setData({userInfo, isLogin: true})
          }
        })  
    }
        // 设置页面标题
    wx.setNavigationBarTitle({
      title: 'SZTU心灵树',
    })
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  
  // 增加生理值
  addSL() {
    // 更新生理值属性并保存到云数据库
    this.updateAttribute("shengli", () => {
      this.saveToCloud();
    });
  },
  
  // 增加心理值
  addXL() {
    // 更新心理值属性并保存到云数据库
    this.updateAttribute("xinli", () => {
      this.saveToCloud();
    });
  },
  
  // 增加情绪值
  addQX() {
    // 更新情绪值属性并保存到云数据库
    this.updateAttribute("qingxu", () => {
      this.saveToCloud();
    });
  },
  
  // 增加社交值
  addSJ() {
    // 更新社交值属性并保存到云数据库
    this.updateAttribute("shejiao", () => {
      this.saveToCloud();
    });
  },
  
  // 更新属性值函数
  updateAttribute(attributeName, callback) {
      // 使用当前登录用户的 _id
  const { fuyuanli, gap, Level } = this.data.userInfo;
    const attributeValue = fuyuanli[attributeName] + 1;
    fuyuanli[attributeName] = attributeValue;
    // 判断是否需要更新 max 属性
    if (fuyuanli.shengli >= fuyuanli.max && fuyuanli.xinli >= fuyuanli.max && fuyuanli.qingxu >= fuyuanli.max && fuyuanli.shejiao >= fuyuanli.max) {
      const newMax = fuyuanli.max + fuyuanli.gap;
      const newGap = fuyuanli.gap + 5;
      const newLevel = fuyuanli.Level + 1;
      this.setData({
        'fuyuanli.max': newMax,
        'fuyuanli.gap': newGap,
        'fuyuanli.Level': newLevel
      }, () => {
        callback(); // 在更新 fuyuanli 后，执行回调函数
      });
    } else {
      this.setData({
        'fuyuanli': fuyuanli
      }, () => {
        callback(); // 在更新 fuyuanli 后，执行回调函数
      });
    }
  },
  
  saveToCloud() {
    const db = wx.cloud.database();
    db.collection('users').doc(this.data.userInfo._id).update({
      data: {
        fuyuanli: this.data.fuyuanli,
        max: this.data.max,
        gap: this.data.gap,
        Level: this.data.Level
      },
      success: function(res) {
        console.log('保存数据到云数据库成功', res.data);
      },
      fail: function(res) {
        console.error('保存数据到云数据库失败', res);
      }
    });
  },
})